/*
 *
 * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved.
 * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 */
// Copyright (c) 1995-96 by Cisco Systems, Inc.

package com.sun.jmx.snmp.daemon;

/**
 * A static instance of this class is usually created.  It contains a
 * counter that is incremented every time it is accessed.  For example,
 * this class can be used in <CODE>SnmpSession</CODE> to generate a request
 * identifier that is used to identify a message in a client-server session.
 * The class wraps around when it reaches the maximum positive value, 2^31 - 1.
 */

final class SnmpRequestCounter {
    /**
     * A counter with value between 1...2^31-1.
     */
    int reqid = 0;

    public SnmpRequestCounter() {
    }

    /**
     * Returns the next request identifier.
     *
     * @return next request identifier.  The value wraps to 1 if it reaches negative value.
     */
    public synchronized int getNewId() {
        if (++reqid < 0)
            reqid = 1;
        return reqid;
    }
}
